/*
 * 
 * 
 * 
 */
package com.hboxs.asl.service;

import com.hboxs.asl.entity.Cart;
import com.hboxs.asl.entity.Member;

import java.util.List;
import java.util.Map;

/**
 * Service - 购物车
 */
public interface CartService extends BaseService<Cart, Long> {

    /**
     * 获取当前购物车(session,网页)
     *
     * @return 当前购物车, 若不存在则返回null
     */
    Cart getCurrent();

    /**
     * 获取当前购物车(token,App),request带参数token,id,key,id和key可不传
     *
     * @return 当前购物车, 若不存在则返回null
     */
    Cart getCurrentByToken();

    /**
     * 合并临时购物车至会员
     *
     * @param member 会员
     * @param cart   临时购物车
     */
    void merge(Member member, Cart cart);

    /**
     * 清除过期购物车
     */
    void evictExpired();

    /**
     * 处理购物车的促销
     *
     * @param cart 购物车
     */
    void dealPromotion(Cart cart);

    /**
     * 取消购物车选择
     *
     * @param cart 购物车
     */
    void cancelSelected(Cart cart);

    /**
     * 获取当前购物车
     *
     * @param member 会员
     * @return cart
     */
    Cart getCurrent(Member member);

    /**
     * 获取当前购物车
     *
     * @param member 会员
     * @return cart
     */
    Cart getCurrentByToken(Member member);

    /**
     * 全选
     *
     * @param cart 购物车
     */
    void selectedAll(Cart cart);

    /**
     * 获取购物车中各类商品总数量
     *
     * @param cart
     * @return
     */
    Long getTotalNumberOfGoodsInCart(Cart cart);

    /**
     * 分离购物车
     * @return
     */
    List<Map<String, Object>> splitCart(Cart cart);
}